package com.dhj.jvmstudy.chapter04;

import java.util.Date;

/**
 * 局部变量表 Slot变量槽
 */
public class LocalVariableTest {

    private int count = 0;

    public static void main(String[] args) {
        LocalVariableTest test = new LocalVariableTest();
        int num = 10;
        test.test1();
    }

    public static void testStatic() {
        LocalVariableTest test = new LocalVariableTest();
        Date date = new Date();
        int count = 10;
        System.out.println(count);
    }

    public void test1() {
        Date date = new Date();
        String name1 = "dhj.com";
        String info = test2(date, name1);
        System.out.println(date + name1);
    }

    public String test2(Date dateP, String name2) {
        dateP = null;
        name2 = "dahuajia";
        double weight = 130.5;
        char gender = '男';
        return dateP + name2;
    }

    public void test3() {
        count++;
    }

    public void test4() {
        int a = 0;
        {
            int b = 0;
            b = a + 1;
        }
        // 变量c使用之前已经销毁的变量b占据的slot槽位
        int c = a + 1;
    }


    /**
     * 变量的分类：
     * 按照数据类型分：1、基本数据类型，2、引用数据类型
     * 按照在类中声明的位置分：
     *      1、成员变量：在使用前，都经历过默认初始化赋值
     *          1.1 类变量：linking的prepare阶段：给类变量默认赋值 --> initial阶段：显式赋值（静态代码块）
     *          1.2 实例变量：随着对象的创建，会在堆空间中分配实例变量空间，并进行默认赋值
     *      2、局部变量：在使用前，必须要进行显式赋值，否则编译不通过
     */

    public void test5(){
        int num;
        /**
         * 报错 变量num没有被初始化
         * Variable 'num' might not have been initialized
         */
        //System.out.println(num);
    }

}
